#include <stdio.h>
#include <stdlib.h>
/*

int *test()//错误的代码
{
    int i = 0;//i在栈里面
    return i;
}

int main()
{
    int *p = test();//这段代码执行完毕后，p指向了一个无效的地址
    //所以下面的赋值，是错误的
    *p = 10;

    return 0;
}

*/
int *test()//正确的代码
{
    int *i = malloc(sizeof(int));//i在堆里面
    return i;
}


int main()
{
    int *p =test();//代码执行完毕后，堆里面的内存没有清空，所以i的地址还在,
    //所以下面的代码可以继续赋值
    *p = 10;
    free(p);
    return 0;
}
